package com.example.aicodemother.ai;

import com.example.aicodemother.ai.model.HtmlCodeResult;
import com.example.aicodemother.ai.model.MultiFileCodeResult;
import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;


import dev.langchain4j.service.TokenStream;
import dev.langchain4j.service.UserMessage;
import reactor.core.publisher.Flux;

public interface AiCodeGeneratorService {

    /**
     * 根据用户输入生成HTML代码
     * @param userMessage 用户输入的描述信息
     * @return HtmlCodeResult 包含生成的HTML代码和描述信息
     */
    @SystemMessage(fromResource = "prompt/codegen-html-system-prompt.txt")
    HtmlCodeResult generateHtmlCode(@MemoryId int memoryId, @UserMessage String userMessage);

    /**
     * 根据用户输入生成多文件代码（HTML、CSS、JS）
     * @param userMessage 用户输入的描述信息
     * @return MultiFileCodeResult 包含生成的HTML、CSS、JS代码和描述信息
     */
    @SystemMessage(fromResource = "prompt/codegen-multi-file-system-prompt.txt")
    MultiFileCodeResult generateMultiFileCode(String userMessage);

    /**
     * 根据用户输入流式生成HTML代码
     * @param userMessage 用户输入的描述信息
     * @return Flux<String> 流式返回生成的HTML代码片段
     */
    @SystemMessage(fromResource = "prompt/codegen-html-system-prompt.txt")
    Flux<String> generateHtmlCodeStreaming(String userMessage);

    /**
     * 根据用户输入流式生成多文件代码（HTML、CSS、JS）
     * @param userMessage 用户输入的描述信息
     * @return Flux<String> 流式返回生成的代码片段
     */
    @SystemMessage(fromResource = "prompt/codegen-multi-file-system-prompt.txt")
    Flux<String> generateMultiFileCodeStreaming(String userMessage);

    /**
     * 生成 Vue 项目代码（流式）
     *
     * @param userMessage 用户消息
     * @return 生成过程的流式响应
     */
    @SystemMessage(fromResource = "prompt/codegen-vue-project-system-prompt.txt")
    TokenStream generateVueProjectCodeStream(@MemoryId long appId, @UserMessage String userMessage);

}
